package org.footballmanager.pandafootball.system.service;

import org.footballmanager.pandafootball.system.domain.FootClub;
import org.footballmanager.pandafootball.system.domain.FootUser;
import org.footballmanager.pandafootball.system.form.impl.FootClubSearchForm;
import org.springframework.ui.Model;

import javax.servlet.http.HttpServletRequest;
import java.io.Serializable;
import java.util.List;

public interface FootClubService extends RepeatService<FootClub> {
    /**
     * 根据赛季获取积分榜
     *
     * @param isGe24 是否获取场次大于24的
     * @param sjId   赛季主键
     * @return 常规赛积分榜
     */
    List<FootClub> getScoreboard(boolean isGe24, Long sjId);

    /**
     * 重新算排名
     *
     * @param request 请求
     */
    void reComputeRanking(HttpServletRequest request);

    /**
     * 添加新赛季的俱乐部信息到表中
     *
     * @param sjId    赛季主键
     * @param request 请求
     */
    void addNewClubInfo(Long sjId, HttpServletRequest request);

    /**
     * 根据赛季找所有俱乐部其他奖励的对应信息
     *
     * @param type 类型
     * @param sjId 赛季主键
     * @return 所有俱乐部其他奖励的对应信息
     */
    List<FootClub> getWinClubsBySj(int type, Long sjId);

    /**
     * 获取当赛季的前i名信息
     *
     * @param i 第i名
     * @return 俱乐部信息
     */
    FootClub getTopClubBySj(int i);

    /**
     * 保存新的俱乐部信息到数据库
     *
     * @param user    用户
     * @param request 请求
     * @return 主键
     */
    Serializable saveNewClub(FootUser user, HttpServletRequest request);

    /**
     * 根据用户主键查找所有对应的俱乐部信息
     *
     * @param userId 用户主键
     * @param sjId   赛季主键
     * @return 所有对应的俱乐部信息
     */
    List<FootClub> getClubsByUseridandSj(Long userId, Long sjId);

    /**
     * 根据赛季和用户主键来获取当前用户的名次
     *
     * @param userId 用户主键
     * @return 参加季后赛类型
     */
    Boolean findNumByUserId(Long userId);

    /**
     * 获取top名俱乐部信息
     *
     * @param sjId   赛季主键
     * @param top    第Top名
     * @param buttom 最后
     * @return 俱乐部信息列表
     */
    List<FootClub> findTopClub(Long sjId, Integer top, Integer buttom);

    /**
     * 翻页方法
     *
     * @param footClubSearchForm 条件
     * @return 列表
     */
    List<FootClub> findall(FootClubSearchForm footClubSearchForm);

    /**
     * 查询
     *
     * @param entityname         实体类名
     * @param map                参数
     * @param footClubSearchForm 条件
     */
    void search(String entityname, Model map, FootClubSearchForm footClubSearchForm);

    /**
     * 更改球队设置
     *
     * @param footClub 俱乐部实体类
     * @param request  请求
     */
    void changeQd(FootClub footClub, HttpServletRequest request);

    /**
     * 根据用户主键删除对应信息
     *
     * @param userId  用户主键
     * @param request 请求
     */
    void deleteByUserId(Long userId, HttpServletRequest request);
}